package com.haojin.mybatis.mapper;

import com.haojin.mybatis.pojo.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author .29.
 * @create 2023-03-13 10:36
 */
public interface EmpMapper {
    /**
     * 查询所有的员工信息
     */
    List<Emp> getAllEmp();

    /**
     * 查询员工以及员工所在部门的信息
     */
    Emp getEmpAndDept(@Param("eid") int eid);

    /**
     * 通过分布查询员工及其对应部门的信息
     * 第一步：查询员工信息
     */
    Emp getEmpAndDeptByStep1(@Param("eid") Integer eid);

    /*
    * 分步查询的优点：可以实现延迟加载，但是必须在核心配置文件中设置全局配置信息：
      - lazyLoadingEnabled：延迟加载的全局开关。当开启时，所有关联对象都会延迟加载
      - aggressiveLazyLoading：当开启时，任何方法的调用都会加载该对象的所有属性。
      *  否则，每个属性会按需加载此时就可以实现按需加载，获取的数据是什么，就只会执行相应的sql。
      *  此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载，fetchType="lazy(延迟加载)|eager(立即加载)"
    * */

    /**
     * 通过分布查询查询部门以及部门中所有员工的信息
     * 分布查询第二部，根据did查询对应的员工信息
     */
    List<Emp> getDeptAndEmpByStep2(@Param("did") Integer did);
}
